/**
 * 
 */
package com.proyecto.contratos.modelo.servicios;

import org.hibernate.exception.ConstraintViolationException;

import com.proyecto.contratos.modelo.dto.ContratosPortafolioservicios;
import com.proyecto.contratos.modelo.dto.ContratosTarifas;
import com.proyecto.contratos.modelo.dto.CorrelativosContratacionId;
import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.ServicioGenerico;

/**
 * @author vico
 *
 */
public class ServicioContratosTarifas extends ServicioGenerico {

	/**
	 * 
	 */
	ServicioCorrelativosContratacion servicioCorrelativosContratacion;
	
	public ServicioContratosTarifas() {
		// TODO Auto-generated constructor stub
	}
	

	@Override
	public void incluir(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub

		ContratosTarifas objContratosTarifas = (ContratosTarifas) pojo;

		if (isValidacionActiva()){
			validacion.incluir(objContratosTarifas);
		}
		
		try {
			Long proxNumero = servicioCorrelativosContratacion.obtenerProximoNumeroComoEntero(
					new CorrelativosContratacionId (objContratosTarifas.getId().getCiaopr(),"CONTRATOSTARIFAS","cnttarifacod"),true);
					
			objContratosTarifas.getId().setCnttarifacod(proxNumero.intValue());
			
			super.incluir(objContratosTarifas, true);
			
		} catch (org.springframework.dao.DataIntegrityViolationException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.PropertyValueException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.datoRequeridoVacio");
			} else if (e.getMostSpecificCause() instanceof ConstraintViolationException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.registroDuplicado");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");

		} catch (org.springframework.dao.DataAccessResourceFailureException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.exception.JDBCConnectionException) {
				throw new GeneralException(
						"error." + claveProperties + ".conexion");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");
		} catch (Exception e) {
			System.err.println(":::ServicioContratosTarifas::: " + e.getMessage());
			if("advertencia.contratos.tablaApoyo.CorrelativosContratos.modificar.BloqueoOptimista".equals(e.getMessage())){
				throw new GeneralException(	e.getMessage());
			}else{
				throw new GeneralException(
						"error." + claveProperties + ".desconocido");
			}
			
		}
	}


	public ServicioCorrelativosContratacion getServicioCorrelativosContratacion() {
		return servicioCorrelativosContratacion;
	}

	public void setServicioCorrelativosContratacion(
			ServicioCorrelativosContratacion servicioCorrelativosContratacion) {
		this.servicioCorrelativosContratacion = servicioCorrelativosContratacion;
	}

}
